package com.wm.walmart.util;

import java.util.ArrayList;
import java.util.List;

import com.wm.walmart.entity.Modules;

public class TreeData {
	/**
	 * 获取根集合
	 * 
	 * @param mList所有模块集合
	 * @param menu
	 *            根据单个角色ID获取的模块集合
	 * @return
	 */
	public static List<Modules> getParent(List<Modules> mList,
			List<Modules> menu) {
		List<Modules> rootMenu = new ArrayList<Modules>();
		for (Modules nav : mList) {
			if (nav.getMParentId() == 0) {// 父节点是0的，为根节点。
				rootMenu.add(nav);
			}
		}

		for (Modules nav : rootMenu) {
			/* 获取根节点下的所有子节点 使用getChild方法 */
			List<Modules> childList = getChild(nav.getMId(), mList, menu);
			nav.setChildren(childList);// 给根节点设置子节点
		}
		return rootMenu;
	}

	/**
	 * 获取子节点
	 * 
	 * @param id
	 *            父节点id
	 * @param allMenu
	 *            所有菜单列表
	 * @return 每个根节点下，所有子菜单列表
	 */
	public static List<Modules> getChild(Integer id, List<Modules> allMenu,
			List<Modules> menu) {
		// 子菜单
		List<Modules> childList = new ArrayList<Modules>();

		// 遍历所有节点，将所有菜单的父id与传过来的根节点的id比较
		for (Modules nav : allMenu) {

			// 相等说明：为该根节点的子节点。
			if (nav.getMParentId().equals(id)) {
				if (menu != null && nav.getMId() != 0) {
					for (Modules m : menu) {
						if (m.getMId().equals(nav.getMId())) {
							nav.setChecked(true);
						}
					}
				}

				childList.add(nav);
			}

		}
		// 递归
		for (Modules nav : childList) {
			nav.setChildren(getChild(nav.getMId(), allMenu, menu));
			if (nav.getChildren().size() > 0) {
				nav.setState("closed");
				nav.setChecked(false);
			}
		}
		// Collections.sort(childList,order());//排序
		// 如果节点下没有子节点，返回一个空List（递归退出）
		if (childList.size() == 0) {
			return new ArrayList<Modules>();
		}
		return childList;
	}
}
